broadway backend: allow building on OpenBSD
authorAntoine Jacoutot <ajacoutot@gnome.org>
Thu, 17 Apr 2014 22:59:45 +0000 (00:59 +0200)
committerAntoine Jacoutot <ajacoutot@gnome.org>
Fri, 18 Apr 2014 16:20:34 +0000 (18:20 +0200)
On OpenBSD shm_open(3) is part of libc and there is not librt, so add an
according check.
Check if we have posix_fallocate before using it.

https://bugzilla.gnome.org/show_bug.cgi?id=728272

configure.ac
gdk/broadway/Makefile.am
gdk/broadway/gdkbroadway-server.c

index 462bcca90106093393879ab88be25a5c1687b222..12544a3f8f87e0504f06e08a8ad8932780e1f7dc 100644 (file)
@@ -397,6 +397,11 @@ else
 fi
 AC_SUBST(DISABLE_ON_QUARTZ)
 
+AC_CHECK_LIB([rt], [shm_open], [SHM_LIBS="-lrt"], [SHM_LIBS=""])
+AC_SUBST(SHM_LIBS)
+
+AC_CHECK_FUNCS(posix_fallocate)
+
 if test "x$enable_broadway_backend" = xyes; then
   GDK_BACKENDS="$GDK_BACKENDS broadway"
   cairo_backends="$cairo_backends cairo"
index af1fa9783ca93e8de5568add4b50fc1c81c1590d..0f190b340264f904ae0999230749c2d91ef9b165 100644 (file)
@@ -1,5 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 include $(top_srcdir)/Makefile.decl
+NULL =
 
 libgdkincludedir = $(includedir)/gtk-3.0/gdk
 libgdkbroadwayincludedir = $(includedir)/gtk-3.0/gdk/broadway
@@ -75,7 +76,8 @@ libgdk_broadway_la_SOURCES =          \
 
 if OS_UNIX
 libgdk_broadway_la_LIBADD = \
-       -lrt
+       $(SHM_LIBS)         \
+       $(NULL)
 endif
 
 broadwayd_SOURCES = \
@@ -91,7 +93,7 @@ broadwayd_SOURCES = \
 if OS_WIN32
 broadwayd_LDADD = $(GDK_DEP_LIBS) -lws2_32
 else
-broadwayd_LDADD = $(GDK_DEP_LIBS) -lrt
+broadwayd_LDADD = $(GDK_DEP_LIBS) @SHM_LIBS@
 endif
 
 MAINTAINERCLEANFILES = $(broadway_built_sources)
index 55ab58bfa760235393f1bedf9c7b705a1e359533..dfbb19dc4fb8b1d8dc52d9855eeb3a09065f5e65 100644 (file)
@@ -540,12 +540,14 @@ map_named_shm (char *name, gsize size)
   res = ftruncate (fd, size);
   g_assert (res != -1);
 
+#ifdef HAVE_POSIX_FALLOCATE
   res = posix_fallocate (fd, 0, size);
   if (res != 0)
     {
       shm_unlink (name);
       g_error ("Not enough shared memory for window surface");
     }
+#endif
   
   ptr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);